0
我试图创建我自己的过程来搜索整个数据库的文本字符串,但我不断收到一个动态SQL相关的错误。我知道有其他程序可用,但我只是想尝试创建自己的练习。这是一段时间,我仍然无法弄清楚这... ...有人可以帮我一些动态SQL知识
USE AdventureWorks2014
GO
SET NOCOUNT ON;
DECLARE @tablename nvarchar(max) = ''
DECLARE @colname nvarchar(128)
DECLARE @searchstring nvarchar(max) = 'Ken'
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
IF OBJECT_ID('tempdb..#Dynamic') IS NOT NULL
DROP TABLE #Dynamic
CREATE TABLE #Results (tablename nvarchar(max), colname nvarchar(128))
CREATE TABLE #Dynamic (colname nvarchar(128))
WHILE @tablename IS NOT NULL
BEGIN
SET @colname = ''
SET @tablename = (
SELECT MIN(SCHEMA_NAME(ta.schema_id) + '.' + ta.name)
FROM sys.tables ta
WHERE SCHEMA_NAME(ta.schema_id) + '.' + ta.name > @tablename
AND ta.object_id IN (
SELECT DISTINCT(c.object_id)
FROM sys.columns c
JOIN sys.types t
ON c.user_type_id = t.user_type_id
AND t.name IN ('varchar', 'nvarchar','char','name')
)
)
WHILE (@tablename IS NOT NULL) AND (@colname IS NOT NULL)
BEGIN
SET @colname = (
SELECT MIN(c.name)
FROM sys.columns c
JOIN sys.types t
ON c.user_type_id = t.user_type_id
AND t.name IN ('nvarchar', 'varchar','char','name')
AND c.object_id = OBJECT_ID(@tablename)
and c.name > @colname
)
IF @colname IS NOT NULL
BEGIN
SET @tablename = QUOTENAME(@tablename)
SET @colname = QUOTENAME(@colname)
INSERT INTO #Results
EXEC
(
'SELECT '+ @colname +
' FROM ' [email protected] +
' WHERE ' + @colname + ' IN ' + @SearchString
)
END
END
END
[为什么“有人可以帮我吗?”不是一个真正的问题?](https://meta.stackoverflow.com/q/284236/62576)和写*我不断收到错误*是一个绝对无用的问题描述。你得到的错误*就在你面前的屏幕上。您绝对没有理由不将它们包含在您的文章中,因此我们也提供了相关信息。你要求我们捐出时间来解决**你的问题;您应该尽可能简单地通过在屏幕上包含**正确的相关详细信息来做到这一点。 –