我知道存储过程通过执行路径更有效(比应用程序中的内联 sql)。然而,当被按下时,我对原因不是很了解。
我想知道对此的技术推理(以稍后我可以向某人解释的方式)。
谁能帮我制定一个好的答案?
我在服务器上的一个实例上运行以下内容:
SELECT c.*
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(@tablename);
Run Code Online (Sandbox Code Playgroud)
一切都很好。
我想运行相同的语句,但将其指向服务器上的另一个数据库。
数据库名.dbo.表名
我已经尝试了以下(和其他变体),但它不起作用。
SELECT c.*
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('databaseName.dbo.tablename');
Run Code Online (Sandbox Code Playgroud)
有没有办法从另一个数据库获取一个数据库的列信息?
代码:
SELECT @SQL = @SQL + 'INSERT INTO myTable
(ColumnName,ColumnValue,SID,SName,RID,RName)
VALUES (''' + QUOTENAME(c.name) + ''',NULL,0,NULL,0,NULL);'
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(@tablename);
EXEC(@SQL);
Run Code Online (Sandbox Code Playgroud)
有没有办法动态地做到这一点?如果我有一个@DBName我正在传递的参数。